package main

import "errors"

/*
* Author: JacksonCoder
* CreateTime: 2024/12/1
 */

// T 类型参数， 名字叫做T， 约束是any 等于没有约束
type List[T any] interface {
	Add(idx int, t T)
	Append(t T)
}

func UseList() {
	var l List[int]
	l.Append(123)
}

func main() {
	//UseList()
	println(Sum[int](1, 2, 3))
	println(Sum[Integer](1, 2, 3))
	println(Sum[float64](11.2, 2.3, 3.4))
	//var j MyMarshal
	//ReleaseResource[*MyMarshal](&j)
}

type LinkedList[T any] struct {
	head *node[T]
	t    T
}

type node[T any] struct {
	val T
}

func Max[T Number](vals ...T) (T, error) {
	if len(vals) == 0 {
		var t T
		return t, errors.New("你的下标不对")
	}
	res := vals[0]
	for l := 0; l < len(vals); l++ {
		if res < vals[l] {
			res = vals[l]
		}
	}
	return res, nil
}

func AddSlice[T any](slice []T, idx int, val T) ([]T, error) {
	// idx是负数 或者超过了 slice的界限
	if idx < 0 || idx >= len(slice) {
		return nil, errors.New("你的下标出错")
	}
	res := make([]T, 0, len(slice)+1)
	for i := 0; i < idx; i++ {
		res = append(res, slice[i])
	}
	slice[idx] = val
	for i := idx; i < len(slice); i++ {
		res = append(res, slice[i])
	}

	return res, nil
}
